package top.xia17.plugins.fast.dynamic.datasource.dao;

import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.annotation.JsonIgnore;
import top.xia17.plugins.fast.common.database.dynamic.DatasourceInfo;
import top.xia17.plugins.fast.common.database.jpa.extension.BaseUserTimeEntity;
import top.xia17.plugins.fast.common.database.jpa.extension.JpaEntity;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import jakarta.persistence.*;

/**
 * 数据源实体
 *
 * @author xia17
 * @date 2022/4/13
 */
@Entity
@Table(name = "sys_datasource")
@Getter
@Setter
@Accessors(chain = true)
public class DatasourceEntity extends BaseUserTimeEntity implements JpaEntity<Long> {

    /**
     * 主键
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 数据源英文名
     */
    private String engName;

    /**
     * 数据源中文名
     */
    private String cnName;

    /**
     * 数据库类型
     */
    private String type;

    /**
     * 连接地址
     */
    private String url;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    @JsonIgnore
    private String password;

    /**
     * 驱动
     */
    private String driver;

    /**
     * 是否启用
     */
    private Boolean enabled;

    /**
     * 数据库名
     */
    private String schemaName;


    /**
     * 转换成数据源配置
     *
     * @param password 密码 ，传入则使用这个
     * @return /
     */
    public DatasourceInfo buildDatasourceInfo(String password) {
        return new DatasourceInfo()
                .setDsName(this.engName)
                .setUrl(this.url)
                .setUsername(this.username)
                .setPassword(StrUtil.isBlank(password) ? this.password : password)
                .setSchemaName(this.schemaName)
                .setDriver(this.driver);
    }


}
